//
//  main.c
//  优先级与结合方向
//
//  Created by ws on 2017/7/13.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
 优先级:优先级高的操作符他们两边的操作数优先与这个操作符进行结合成为一个整体
 结合方向:当优先级相同的时候从那边开始计算
 算术运算符的结合方向是从左到右的
 */
void test1(void){
    int a = 10 * 2 + 3/2;
    printf("%d\n",a);//21
    
    int c = 10 * 2 / 3 % 2;
    printf("%d\n",c);
}
/**
 类型转换
 在计算机中只有类型相同的数才能进行运算
 */
/**
 自动类型转换
 */
void test2(){
    int a = 10;
    float b = 2.5f;
    //自动类型转换-->类型提升(把int a = 10 转换成 10.0f) 当表示小的类型与大的类型进行运算,小的类型会自动转换成大的类型
    float c = a + b;
    printf("%f\n",c);//自动类型转换
    printf("%f\n",a + b);//自动类型转换
    
    char d = 'a';
    printf("%c\n",d);
    printf("%d\n",d);
    printf("%c\n",97);
    printf("%d\n",d + 10);

}
/**
 强制类型转换 (要转换的类型)N 可以把大的类型转换成小的类型  也可以吧小的类型转换成大的类型
 在某个数的前面加 (数据类型)数据
 */
void test3(void){
    //当两个相同数据类型的数进行运算的时候,那么他们运算出来的结果还是什么类型
    double d = 10 / 4 ;
    printf("%lf\n",d);
    
    double dd = 10.0 / 4 ;
    printf("%lf\n",dd);
    
    double ddd = (double)10 / 4 ;
    printf("%lf\n",ddd);
}
/**
 当我们把一个大类型的数赋值给小类型的数,大类型会自动转换成小类型
 注意点:这样会导致精度丢失
 */
void test4(){
    int a = 10.5;//把double(8个字节)类型转赋值给int类型(4个字节):这行代码会自动把double类型数据给截断把正数部分给a-->自动类型转换
    printf("%d",a);

}
int main(int argc, const char * argv[]) {
       return 0;
}
